package com.hsnn.medstgmini.sys.information.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.std.model.HospInfo;
import com.hsnn.medstgmini.base.std.model.StdCompinfo;
import com.hsnn.medstgmini.base.std.model.StdHealthbureau;
import com.hsnn.medstgmini.model.MessageHasRead;
import com.hsnn.medstgmini.model.MessageType;
import com.hsnn.medstgmini.model.MessageUserType;
import com.hsnn.medstgmini.pro.base.model.form.FileUploadResult;
import com.hsnn.medstgmini.sys.information.model.SysInfoAttachment;
import com.hsnn.medstgmini.sys.information.model.SysMessage;
import com.hsnn.medstgmini.sys.information.service.impl.SysMessageManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.model.UserType;
import com.hsnn.medstgmini.util.FileUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.form.FileLoadForm;

@Controller
@RequestMapping("/sysMessage")
public class SysMessageController {
	
	private static final Logger log = Logger.getLogger(SysMessageController.class);
	
	@Autowired
	private SysMessageManager sysMessageManager;  
	
	@Autowired
	private HttpServletRequest request;
	
	@Autowired
	private HttpServletResponse response;
	
	/**
	 * 
	 *@category 下载结果
	 *@author 邱磊
	 *@date 2015年11月12日 上午11:20:38
	 *@param 
	 *@return ResponseEntity<byte[]>
	 */
	@RequestMapping("/downloadResult")    
    public void downloadResult(String sysInfoAttachId, String filePath,String fileName) throws Exception {  
		FileLoadForm form = new FileLoadForm();
		form.setRequest(request);
		form.setResponse(response);
		form.setFilePath(filePath.substring(0, filePath.lastIndexOf("/")));
		form.setFileName(filePath.substring(filePath.lastIndexOf("/"), filePath.length()));
		SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
		if(user != null){
			sysMessageManager.updateDownSum(sysInfoAttachId, user.getId());
		}
		FileUtil.downLoad(form);
	}
	
	/**
	 * @category 根据消息id回复发件人
	 * @author 韩守松
	 * @date   2015年11月11日
	 * @param  @param messageId
	 * @param  @return
	 */
	@RequestMapping("/backMessage")
	@ResponseBody
	public Pagination backMessage(Pagination page,String messageId){
		try {
			if(StringUtils.isNotBlank(messageId)){
				Map<String,Object> map = sysMessageManager.getSysMessageById(messageId);
				page.setRows(map);
				page.setSuccess(true);
			}else{
				page.setSuccess(false);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 单条消息标记为已读
	 * @author 韩守松
	 * @date   2015年11月11日
	 * @param  @return
	 */
	@RequestMapping("/readMessage")
	@ResponseBody
	public Pagination readMessage(Pagination page,SysMessage sysMessage){
		try {
			SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
			if(sysMessage == null){
				page.setSuccess(false);
			}else{
				sysMessage.setReadDatetime(new Date());
				if(user != null ){
					sysMessage.setReceUser(user.getId());
					sysMessage.setReceUserName(user.getName());
				}else{
					page.setSuccess(false);
					return page;
				}
				sysMessageManager.updateReadStatus(sysMessage);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 单条消息发送
	 * @author 韩守松
	 * @date   2015年11月11日
	 * @param  @return
	 */
	@RequestMapping("/sendMessage")
	@ResponseBody
	public Pagination sendMessage(Pagination page,SysMessage sysMessage){
		try {
			if(sysMessage != null){
				sysMessageManager.update(sysMessage);
				page.setSuccess(true);
			}else{
				page.setSuccess(false);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 多条消息发送
	 * @author 韩守松
	 * @date   2015年11月11日
	 * @param  @return
	 */
	@RequestMapping("/sendManyMessage")
	@ResponseBody
	public Pagination sendManyMessage(Pagination page,SysMessage sysMessage){
		try {
			if(sysMessage != null){
				if(StringUtils.isNotBlank(sysMessage.getMessageId())){
					String[] id = sysMessage.getMessageId().split(",");
					for(int i = 0;i<id.length;i++){
						sysMessage.setMessageId(id[i]);
						sysMessageManager.update(sysMessage);
					}
				}
				page.setSuccess(true);
			}else{
				page.setSuccess(false);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 跳转到信息详情页面
	 * @author 韩守松
	 * @date   2015年11月10日
	 * @param  @param messageId
	 * @param  @return
	 */
	@RequestMapping("/toMessageDetail")
	public String toMessageDetail(String messageId){
		log.info("enter toMessageDetail method");
		Map<String,Object> map = sysMessageManager.getSysMessageById(messageId);
		request.setAttribute("sysMessage", map);
		if(null != map.get("url")){
			String url = (String) map.get("url");
			String fileName = (String) map.get("fileName");
			String sysInfoAttachId = (String) map.get("sysInfoAttachId");
			List<Map<String,String>> list = new ArrayList<Map<String,String>>();
			Map<String,String> listMap = new HashMap<String, String>();
			String[] urls = url.split(",");
			String[] fileNames = fileName.split(",");
			String[] sysInfoAttachIds = sysInfoAttachId.split(",");
			for(int i = 0; i< urls.length;i++){
				listMap.put("url",urls[i]);
				listMap.put("fileName",fileNames[i]);
				listMap.put("sysInfoAttachId",sysInfoAttachIds[i]);
				list.add(i, listMap);
			}
			request.setAttribute("url",list);
		}else{
			request.setAttribute("url","");
		}
		return "/sys/information/detail";
	}
	
	
	/**
	 * @category 新增消息
	 * @author 韩守松
	 * @date   2015年11月10日
	 * @param  @param page
	 * @param  @param sysMessage
	 * @param  @return
	 */
	@RequestMapping("/saveOrUpDate")
	@ResponseBody
	public Pagination saveOrUpDate(Pagination page,SysMessage sysMessage,@RequestParam("licences") MultipartFile[] licences){
		try {
			SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
			if(sysMessage != null){
				if(user != null){
					if(user.getType() == UserType.zx.getKey()){
						StdHealthbureau users = user.getInfo();
						sysMessage.setOrgName(users.getHeaBurName());
					}
					if(user.getType() == UserType.sc.getKey() || user.getType() == UserType.ps.getKey()){
						StdCompinfo comp = user.getInfo();
						sysMessage.setOrgName(comp.getCompName());
					}
					if(user.getType() == UserType.yy.getKey() ){
						HospInfo  hosp = user.getInfo();
						sysMessage.setOrgName(hosp.getHospName());
					}
					sysMessage.setAcctType(user.getType());
					sysMessage.setUserId(user.getId());
				}else{
					page.setSuccess(false);
					return page;
				}
				sysMessage.setSendDatetime(new Date());
				sysMessage.setSendUser(user.getId());
				sysMessage.setOrgId(user.getOrgId());
				sysMessage.setUpdDatetime(new Date());
				sysMessage.setUpdUser(user.getId());
				sysMessage.setHasRead(MessageHasRead.WD.getKey());
				SysInfoAttachment sysinfo = new SysInfoAttachment();
				String urls = "";
				String fileNames = "";
				if (licences != null && licences.length!=0) {
					for(MultipartFile licence : licences){
						FileUploadResult result = sysMessageManager.uploadFile(licence);
							urls+=result.getPath()+",";
							fileNames+=result.getFileName()+",";
					}
				}
				if(StringUtils.isNotBlank(sysMessage.getStrUrls())){
					urls += sysMessage.getStrUrls();
					fileNames += sysMessage.getStrNames();
				}
				sysinfo.setUrl(urls);
				sysinfo.setFileName(fileNames);
				sysMessage.setSysinfo(sysinfo);
				sysMessageManager.saveOrUpDate(sysMessage);
				page.setSuccess(true);
			}else{
				page.setSuccess(false);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 初始化消息编辑数据
	 * @author 韩守松
	 * @date   2015年11月10日
	 * @param  @return
	 */
	@RequestMapping("/editMessage")
	@ResponseBody
	public Pagination editMessage(){
		log.info("enter editMessage method");
		Pagination page = new Pagination();
		String messageId = request.getParameter("messageId");
		try {
			if(StringUtils.isNotBlank(messageId)){
				Map<String,Object> map = sysMessageManager.getSysMessageById(messageId);
				if(map != null){
					map.put("type", map.get("type").equals(MessageType.YH.getValue())?MessageType.YH.getKey():MessageType.XT.getKey() );
				}
				page.setRows(map);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			e.printStackTrace();
			page.setSuccess(false);
		}
		return page;
	}
	
	
	/**
	 * @category 跳转到消息管理发件箱页面
	 * @author 韩守松
	 * @date   2015年11月9日
	 * @param  @return
	 */
	@RequestMapping("/toSysMessageSendList")
	public String toSysMessageSendList(){
		request.setAttribute("messageStatus",  MessageUserType.FJ.getKey());
		return "/sys/information/sendlist";
	}
	/**
	 * @category 跳转到消息管理收件箱页面
	 * @author 韩守松
	 * @date   2015年11月9日
	 * @param  @return
	 */
	@RequestMapping("/toSysMessageReceList")
	public String toSysMessageReceList(){
		request.setAttribute("messageStatus", MessageUserType.SJ.getKey());
		return "/sys/information/recelist";
	}
	
	/**
	 * @category 跳转到消息管理草稿箱页面
	 * @author 韩守松
	 * @date   2015年11月9日
	 * @param  @return
	 */
	@RequestMapping("/toSysMessageList")
	public String toSysMessageList(){
		request.setAttribute("messageStatus",  MessageUserType.CG.getKey());
		return "/sys/information/list";
	}
	
	/**
	 * @category 获取消息管理列表
	 * @author 韩守松
	 * @date   2015年11月9日
	 * @param  @param page
	 * @param  @param sysMessage
	 * @param  @return
	 */
	@RequestMapping("/getSysMessageList")
	@ResponseBody
	public Pagination getSysMessageList(SysMessage sysMessage){
		Pagination page = new Pagination(request);
		try {
			SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
			if(user != null){
				sysMessage.setUserId(user.getId());
			}
			if(sysMessage != null){
				if(sysMessage.getMessageStatus() ==  MessageUserType.CG.getKey()){//草稿箱
					page = sysMessageManager.getSysMessageList(page,sysMessage);
				}
				if(sysMessage.getMessageStatus() ==  MessageUserType.FJ.getKey()){//发件箱
					page = sysMessageManager.getSysMessageSendList(page,sysMessage);
				}
				if(sysMessage.getMessageStatus() ==  MessageUserType.SJ.getKey()){//收件箱
					page = sysMessageManager.getSysMessageReceList(page,sysMessage);
				}
			}
			
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}
	
	/**
	 * @category 跳转到用户列表页面
	 * @author 韩守松
	 * @date   2015年11月9日
	 * @param  @return
	 */
	@RequestMapping("/toUserList")
	public String toUserList(Model model,String receUser){
		log.info("enter zxUserList method");
		List<UserType> userTypeList = new ArrayList<UserType>();
		for (UserType userType : UserType.values()) {
				userTypeList.add(userType);
		}
		model.addAttribute("userTypeList", userTypeList);
		model.addAttribute("receUser", receUser);
		return "/sys/information/userList";
	}
	
}
